\chapter{Experimentos y Pruebas de C\'odigo}

\label{Pruebas}

\section{Ejemplo de funcionamiento de \textit{biLAV}}
En esta secci\'on mostraremos un ejemplo del funcionamiento de la herramienta, tomando como entrada una Base de Datos de \textit{ARVs} (Cap\'itulo \ref{base_datos}).
\begin{itemize}
	\item[] Dado el conjunto de ARVs, se aplica el paso 1 de la Soluci\'on Propuesta del cap\'itulo \ref{SP}, 	
	utilizando el m\'etodo \textit{join\_antivirals()} de la secci\'on \ref{NuevosMetodos}.\\
	Obteniendo como resultado un vector de tipo 	
	\textit{Pos\_Aminoacids\_Triplets} (fig.: \ref{fig:structPosAminoacidsTriplets}).\\
	En la siguiente tabla se muestra el resultado obtenido:
	\begin{table}[h]
			\begin{center}
			\begin{tabular}{| c | c | c | c | c | c | c | c | c | c | c | c |}
							\hline
						    \textit{Posiciones} & \textit{Amino\'acidos} & \textit{Codones} \\ 
						    \hline
							163 & r & CGU, CGC, CGA, CGG, AGA, AGG \\ 
							\hline
							172 & v & GUU, GUC, GUA, GUG \\
							\hline
							213 & f & UUU, UUC \\
							\hline
							282 & v & GUU, GUC, GUA, GUG \\
							\hline
							168 & e & GAA, GAG \\
							\hline
							49 & l & UUA, UUG, CUU, CUC, CUA, CUG \\
							\hline
							83 & v & GUU, GUC, GUA, GUG \\
							\hline
							87 & s & UCU, UCC, UCA, UCG,	AGU, AGC \\
							\hline
							46 & v & GUU,  GUC, GUA, GUG\\
							\hline
							   & a & GCU, GCC, GCA, GCG\\
							\hline
							53 & m & AUG\\
							\hline
							   & l & UUA, UUG, CUU, CUC, CUA, CUG\\
							\hline
							75 &  v & GUU, GUC, GUA, GUG\\
							\hline
							31 & i & AUU, AUC, AUA\\ \hline 
						\end{tabular}
					\end{center}
					\label{tabla_PosAminoacidsTriplets}
					\caption{Vector \textit{Pos\_Aminoacids\_Triplets}}
	\end{table}
	\begin{itemize}
		\item Cantidad de posiciones: Seg\'un el paso 2.1 de la Soluci\'on Propuesta, hay 12 posiciones.
		\item Bases por posici\'on: En la siguiente tabla se pueden observar las bases del n\'umero en base mixta 	
									(mutante), seg\'un el paso 2.2 de la Soluci\'on Propuesta.
								\begin{table}[h]
									 \begin{center}
										\begin{tabular}{| c | c | c | c | c | c | c | c | c | c | c | c |}
											\hline
											 163 & 172 & 213 & 282 & 168 & 49 & 83 & 87 & 46 & 53 & 75 & 31\\
											\hline
											7 & 5 & 3 & 5 & 3 & 7 & 5 & 7 & 9 & 8 & 5 & 4\\
											\hline
										\end{tabular}
									\end{center}
									\caption{Vector \textit{bases}}
									\label{tabla_bases}
								\end{table}

		\item Coeficientes por posici\'on: Tal como se explic\'o en el paso 4.1 de la Soluci\'on Propuesta, el 	
										vector de coeficientes es calculado de la siguiente manera:\\
		\begin{itemize}
			\item El primer valor siempre es 1. Quedando:\\
				\begin{center}
					\begin{tabular}{| c | c | c | c | c | c | c | c | c | c | c | c |}
						\hline
						1 &  &  &  &  &  &  &  &  &  &  & \\
						\hline
					\end{tabular}
				\end{center}
			\item El resto de los valores se calculan: coeficiente[i] = coeficiente[i−1] ∗ bases[\#bases−i], 
					donde i = 1 al inicio.\\
					Quedando:
		\end{itemize}

		\begin{table}[h]
			\begin{center}
					\begin{tabular}{| c | c | c | c | c | c | c | c | c | c | c | c |}
					\hline
					1 & 4 & 20 & 160 & 1440 & 10080 & 50400 & 352800 & 1058400 & 5292000 & 15876000 &	79380000 \\
					\hline
					\end{tabular}
			\end{center}
			\caption{Vector \textit{Coefficients}}
			\label{tabla_coeficientes}
		\end{table}
			\item Cantidad m\'axima de mutantes posibles: Seg\'un el paso 3 de la Soluci\'on Propuesta, la cantidad 
														m\'axima de mutantes posibles en \'este caso es:\\ 
														(7 * 5 * 3 * 5 * 3 * 7 * 5 * 7 * 9 * 8 * 5 * 4) - 1 = 
														555659999.

	\end{itemize}
\end{itemize}

\subsection{Experimento 1: Antivirales que aplican a un \textit{Identificador} dado}
Supongamos que se desea obtener los \textit{ARVs} que aplican al \textit{Identificador:} 350321, para 
\'esto aplicamos el paso 6 de la Soluci\'on Propuesta \ref{SP}.

\begin{itemize}
	\item[1-] Aplicando el paso 6.1 de la Soluci\'on Propuesta al \textit{Id:} 350321.\\
		\begin{center}\begin{tabular}{cccccccccccc}
  			350321 &  \multicolumn{1}{|c}{4}& & & & & & & & & & \\ 
  			\cline{2-1}
   			\textcolor{red}{1} & 87580 & \multicolumn{1}{|c}{5} & & & & & & & & & \\ 
  			\cline{3-1}
   			/ & \textcolor{red}{0} & 17516 & \multicolumn{1}{|c}{8} & & & & & & & & \\ 
  			\cline{4-1}
   			& / & \textcolor{red}{4} & 2189 & \multicolumn{1}{|c}{9} & & & & & & \\ 
  			\cline{5-1}
  			& & / & \textcolor{red}{2} & 243 & \multicolumn{1}{|c}{7} & & & & & \\ 
  			\cline{6-1}
   			& & & / & \textcolor{red}{5} & 34 & \multicolumn{1}{|c}{5} & & & & \\ 
  			\cline{7-1}
  			& & & & / & \textcolor{red}{4} & 6 & \multicolumn{1}{|c}{7} & & & \\ 
  			\cline{8-1}
   			& & & & & / & \textcolor{red}{6} & 0 & \multicolumn{1}{|c}{3} & & \\ 
  			\cline{9-1}
  			& & & & & & / & \textcolor{red}{0} & 0 & \multicolumn{1}{|c}{5}  & \\ 
  			\cline{10-1}
  			& & & & & & & / & \textcolor{red}{0} & 0 & \multicolumn{1}{|c}{3} \\ 
  			\cline{11-1}
  			& & & & & & & & / & \textcolor{red}{0} & 0 & \multicolumn{1}{|c}{5} \\ 
  			\cline{12-1}
  			& & & & & & & & & / & \textcolor{red}{0} & \textcolor{red}{0}\\
  			& & & & & & & & & & / &\\
 		\end{tabular}\end{center} 
 		Obteniendo como mutante (n\'umero en base mixta): 000006452401\\
 			
	\item [2-] Aplicando ahora el paso 6.2 de la Soluci\'on Propuesta a la mutante: 000006452401.\\
				Teniendo en cuenta la tabla \ref{tabla_PosAminoacidsTriplets}, cada valor de la \textit{mutante} 
				(n\'umero en base mixta) representa a los siguientes codones:\\
				0 0 0 0 0\ \ \ 6 \ \ \ \ \ 4 \ \ \ \ \ 5 \ \ \ \ \ 2 \ \ \ \ \ 4 \ \ \ \ \ 0 \ \ \ \ 1 \\
				$\downarrow \ \downarrow \ \downarrow \ \downarrow \ \downarrow \ \ \ 
				\downarrow \ \ \ \ \ \ \downarrow \ \ \ \ \ \ \downarrow \ \ \ \ \ \ \downarrow \ \ \ \ \ \ 	
				\downarrow \ \ \ \ \ \ \downarrow \ \ \ \ \ \downarrow$\\
				 -\ \ -\  -\ \ -\ -\ CUG GUG AGU GUC CUU \ - \ \ AUU \\
				
			   Obtenemos la mutante representada como un vector del tipo \textit{TripletPosition} 	
				(fig.: \ref{fig:structTripletPosition}):\\
				\begin{center}
					\begin{tabular}{| c | c | c | c | c | c | c | c | c | c | c | c |}
						\hline
						163 & 172 & 213 & 282 & 168 & 49 & 83 & 87 & 46 & 53 & 75 & 31\\
						\hline
						- & - & - & - & - & CUG & GUG & AGU & GUC & CUU & - & AUU\\
						\hline
					\end{tabular}
				\end{center}
				Aclaraci\'on: Si para una posici\'on dada de la mutante (n\'umero en base mixta), el valor es 	
							cero, entonces no representa ning\'un cod\'on de dicha posici\'on.
	\item [3-] Por \'ultimo se aplica el paso 6.3 de la Soluci\'on Propuesta, el cual propone calcular la distancia 
			   gen\'etica entre la mutante y cada resistencia perteneciente a cada antiviral. Esto, se hace de la 
			   siguiente manera:\\
			   \begin{itemize}
				   \item Tomamos el primer \textit{ARV} de la Base de Datos, en este caso:\\
				   \begin{lstlisting}[language=XML,keywordstyle=\color{blue}, 
								morekeywords={antiviral, group, resistance, aminos,
								weight, id, num, type, class}]
   <antiviral id="Abacavir"  num = "0" type = "tRT" class = "cNRTI">
        <group min="1.0">
            <resistance pos="163" aminos="R" weight="1.0"/>
            <resistance pos="172" aminos="V" weight="0.5"/>
            <resistance pos="213" aminos="F" weight="0.5"/>
            <resistance pos="282" aminos="V" weight="1.0"/>
        </group>
    </antiviral>
					\end{lstlisting}
					
					\item Se calcula la distancia gen\'etica entre las posiciones coincidentes de la mutante y el 
						antiviral corriente:\\
						\begin{table}[h]
							\begin{center}
								\begin{tabular}{| c | c | c | c | c |}
								\hline
									Posici\'on & Amino\'acido & Codones(Amino\'acido) 	
									\ref{tabla_PosAminoacidsTriplets} & Cod\'on (Mutante) & 
									Distancia gen\'etica\\
								\hline
								\hline
								163 & R & CGU & - & 3\\
								\hline
								    & & CGC & - & 3\\
								\hline
								    & & CGA & - & 3\\
								\hline
								    & & CGG & - & 3\\
								\hline
								    & & AGA & - & 3\\
								\hline
								    & & AGG & - & 3\\
								\hline
								172 & V & GUU & - & 3\\
								\hline
								& & GUC & - & 3\\
								\hline
								& & GUA & - & 3\\
								\hline
								& & GUG & - & 3\\
								\hline
								213 & F & UUU & - & 3\\
								\hline
								& & UUC & - & 3\\
								\hline
								282 & V & GUU & - & 3\\
								\hline
								& & GUC & - & 3\\
								\hline
								& & GUA & - & 3\\
								\hline
								& & GUG & - & 3\\
								\hline
					\end{tabular}
			\end{center}
			\caption{Distancias gen\'eticas para el ARV \textit{Abacavir}}
			\label{tabla_distancia_genetica1}
		\end{table}\\
		En \'este caso, la m\'inima distancia gen\'etica es 3 (tres), por lo tanto, el \textit{ARV Abacavir} aplica 
		a la mutante 000006452401.
		\pagebreak
		\item Tomemos ahora el tercer \textit{ARV} de la Base de Datos:\\
						   \begin{lstlisting}[language=XML,keywordstyle=\color{blue}, 
								morekeywords={antiviral, group, resistance, aminos,
								weight, id, num, type, class}]
    <antiviral id="Atazanavir" num = "10" type = "tPI" class = "cPI">  	
        <group min="1.0">
            <resistance pos="49" aminos="L" weight="1.0"/>  
            <resistance pos="83" aminos="V" weight="1.0"/>
            <resistance pos="87" aminos="S" weight="1.0"/>
        </group>
    </antiviral>
					\end{lstlisting}
		\item Se calcula la distancia gen\'etica entre las posiciones coincidentes de la mutante y el 
			 antiviral corriente:\\
						\begin{table}[h]
							\begin{center}
								\begin{tabular}{| c | c | c | c | c |}
								\hline
									Posici\'on & Amino\'acido & Codones (Amino\'acido) 
									\ref{tabla_PosAminoacidsTriplets} & Cod\'on (Mutante) & Distancia gen\'etica\\
								\hline
								\hline
								49 & L & UUA & CUG & 2\\
								\hline
								    & & UUG & CUG & 1\\
								\hline
								    & & CUU & CUG & 1\\
								\hline
								    & & CUC & CUG & 1\\
								\hline
								    & & CUA & CUG & 1\\
								\hline
								    & & CUG & CUG & 0\\
								\hline
					\end{tabular}
			\end{center}
			\caption{Distancias gen\'eticas para el ARV \textit{Atazanavir}}
			\label{tabla_distancia_genetica2}
		\end{table}\\
		En \'este caso, la m\'inima distancia gen\'etica es 0 (cero), por lo tanto, el \textit{ARV Atazanavir} 
		no aplica a la mutante 000006452401.
	\end{itemize}
		
		\item[4-] Se repite el paso 3 para todos los \textit{ARVs} de la Base de Datos, obteniendo como resultado 
				que los \textit{ARVs} que aplican a la mutante 000006452401 son: \textit{Abacavir} y 
				\textit{Tenofovir}.
\end{itemize}	 
	
\subsection{Experimento 2: Dado un \textit{Id} y un conjunto de \textit{ARVs} que apliquen a dicho \textit{Id}, obtener las mutantes resultantes de dicha aplicaci\'on}
Supongamos que se desean obtener las mutantes resultantes de aplicar los \textit{ARVs: Abacavir} y 
\textit{Tenofovir} a la mutante que representa el \textit{Identificador:} 350321.\\
Aplicamos el paso 7 de la Soluci\'on Propuesta \ref{SP}.

\begin{itemize}
	\item [1-] Se obtiene la \textit{mutante} que representa el \textit{Id:} 350321.\\
			Como vimos en el paso 1 del experimento anterior, el \textit{Id:} 350321 representa a la 	
			\textit{mutante (n\'umero en base mixta):} 000006452401.
	\item [2-] Se obtienen las combinaciones de los \textit{ARVs: Abacavir} y 
			\textit{Tenofovir}. Seg\'un ap\'endice \ref{combinacion_arvs}
	\item [3-] Para cada combinaci\'on del paso anterior se obtienen las mutantes resultantes, reemplazando los 		
			valores correspondiente a cada cod\'on en la mutante (n\'umero en base mixta) original.\\
			Mutante original:\\
			\begin{center}
					\begin{tabular}{| c | c | c | c | c | c | c | c | c | c | c | c |}
						\hline
						163 & 172 & 213 & 282 & 168 & 49 & 83 & 87 & 46 & 53 & 75 & 31\\
						\hline
						0 & 0 & 0 & 0 & 0 & 6 & 4 & 5 & 2 & 4 & 0 & 1\\
						\hline
					\end{tabular}
				\end{center}
			Mutantes resultantes:\\
		\begin{scriptsize}
		

		\begin{flushleft}
			\begin{itemize}

				\item[1-] (163,CGU) $\Longrightarrow$ (163, 1) $\Longrightarrow$ \textcolor{red}{1}00006452401
				\item[2-] (163,CGC) $\Longrightarrow$ (163, 2) $\Longrightarrow$ \textcolor{red}{2}00006452401
				\item[3-] (163,CGA) $\Longrightarrow$ (163, 3) $\Longrightarrow$ \textcolor{red}{3}00006452401
				\item[4-] (163,CGG) $\Longrightarrow$ (163, 4) $\Longrightarrow$ \textcolor{red}{4}00006452401
				\item[5-] (163,AGA) $\Longrightarrow$ (163, 5) $\Longrightarrow$ \textcolor{red}{5}00006452401
				\item[6-] (163,AGG) $\Longrightarrow$ (163, 6) $\Longrightarrow$ \textcolor{red}{6}00006452401
				\item[7-] (168,GAA), (163,CGU) $\Longrightarrow$ (168, 1)(163, 1) $\Longrightarrow$ 
						\textcolor{red}{1}000\textcolor{red}{1}6452401
				\item[8-] (168,GAG), (163,CGU) $\Longrightarrow$ (168, 2)(163, 1) $\Longrightarrow$ 
						\textcolor{red}{1}000\textcolor{red}{2}6452401
			    \item[9-] (168,GAA), (163,CGC) $\Longrightarrow$ (168, 1)(163, 2) $\Longrightarrow$ 
						\textcolor{red}{2}000\textcolor{red}{1}6452401
				\item[10-] (168,GAG), (163,CGC) $\Longrightarrow$ (168, 2)(163, 2) $\Longrightarrow$ 
						\textcolor{red}{2}000\textcolor{red}{2}6452401
				\item[11-] (168,GAA), (163,CGA) $\Longrightarrow$ (168, 1)(163, 3) $\Longrightarrow$ 
						\textcolor{red}{3}000\textcolor{red}{1}6452401
				\item[12-] (168,GAG), (163,CGA) $\Longrightarrow$ (168, 2)(163, 3) $\Longrightarrow$ 
						\textcolor{red}{3}000\textcolor{red}{2}6452401
				\item[13-] (168,GAA), (163,CGG) $\Longrightarrow$ (168, 1)(163, 4) $\Longrightarrow$ 
						\textcolor{red}{4}000\textcolor{red}{1}6452401
				\item[14-] (168,GAG), (163,CGG) $\Longrightarrow$ (168, 2)(163, 4) $\Longrightarrow$ 
						\textcolor{red}{4}000\textcolor{red}{2}6452401
				\item[15-] (168,GAA), (163,AGA) $\Longrightarrow$ (168, 1)(163, 5) $\Longrightarrow$ 
						\textcolor{red}{5}000\textcolor{red}{1}6452401
				\item[16-] (168,GAG), (163,AGA) $\Longrightarrow$ (168, 2)(163, 5) $\Longrightarrow$ 
						\textcolor{red}{5}000\textcolor{red}{2}6452401
				\item[17-] (168,GAA), (163,AGG) $\Longrightarrow$ (168, 1)(163, 6) $\Longrightarrow$ 
						\textcolor{red}{6}000\textcolor{red}{1}6452401
				\item[18-] (168,GAG), (163,AGG) $\Longrightarrow$ (168, 2)(163, 6) $\Longrightarrow$ 
						\textcolor{red}{6}000\textcolor{red}{2}6452401						
				\item[19-] (282,GUU), (163,CGU) $\Longrightarrow$ (282, 1)(163, 1) $\Longrightarrow$ 
						\textcolor{red}{1}00\textcolor{red}{1}06452401
				\item[20-] (282,GUC), (163,CGU) $\Longrightarrow$ (282, 2)(163, 1) $\Longrightarrow$ 
						\textcolor{red}{1}00\textcolor{red}{2}06452401
				\item[21-] (282,GUA), (163,CGU) $\Longrightarrow$ (282, 3)(163, 1) $\Longrightarrow$ 
						\textcolor{red}{1}00\textcolor{red}{3}06452401
				\item[22-] (282,GUG), (163,CGU) $\Longrightarrow$ (282, 4)(163, 1) $\Longrightarrow$ 
						\textcolor{red}{1}00\textcolor{red}{4}06452401
				\item[23-] (282,GUU), (163,CGC) $\Longrightarrow$ (282, 1)(163, 2) $\Longrightarrow$ 
						\textcolor{red}{2}00\textcolor{red}{1}06452401
				\item[24-] (282,GUC), (163,CGC) $\Longrightarrow$ (282, 2)(163, 2) $\Longrightarrow$ 
						\textcolor{red}{2}00\textcolor{red}{2}06452401
				\item[25-] (282,GUA), (163,CGC) $\Longrightarrow$ (282, 3)(163, 2) $\Longrightarrow$ 
						\textcolor{red}{2}00\textcolor{red}{3}06452401
				\item[26-] (282,GUG), (163,CGC) $\Longrightarrow$ (282, 4)(163, 2) $\Longrightarrow$ 
						\textcolor{red}{2}00\textcolor{red}{4}06452401						
				\item[27-] (282,GUU), (163,CGA) $\Longrightarrow$ (282, 1)(163, 3) $\Longrightarrow$ 
						\textcolor{red}{3}00\textcolor{red}{1}06452401
				\item[28-] (282,GUC), (163,CGA) $\Longrightarrow$ (282, 2)(163, 3) $\Longrightarrow$ 
						\textcolor{red}{3}00\textcolor{red}{2}06452401
				\item[29-] (282,GUA), (163,CGA) $\Longrightarrow$ (282, 3)(163, 3) $\Longrightarrow$ 
						\textcolor{red}{3}00\textcolor{red}{3}06452401
				\item[30-] (282,GUG), (163,CGA) $\Longrightarrow$ (282, 4)(163, 3) $\Longrightarrow$ 
						\textcolor{red}{3}00\textcolor{red}{4}06452401						
			    \item[31-] (282,GUU), (163,CGG) $\Longrightarrow$ (282, 1)(163, 4) $\Longrightarrow$ 
						\textcolor{red}{4}00\textcolor{red}{1}06452401
				\item[32-] (282,GUC), (163,CGG) $\Longrightarrow$ (282, 2)(163, 4) $\Longrightarrow$ 
						\textcolor{red}{4}00\textcolor{red}{2}06452401
				\item[33-] (282,GUA), (163,CGG) $\Longrightarrow$ (282, 3)(163, 4) $\Longrightarrow$ 
						\textcolor{red}{4}00\textcolor{red}{3}06452401
				\item[34-] (282,GUG), (163,CGG) $\Longrightarrow$ (282, 4)(163, 4) $\Longrightarrow$ 
						\textcolor{red}{4}00\textcolor{red}{4}06452401				
				\item[35-] (282,GUU), (163,AGA) $\Longrightarrow$ (282, 1)(163, 5) $\Longrightarrow$ 
						\textcolor{red}{5}00\textcolor{red}{1}06452401
				\item[36-] (282,GUC), (163,AGA) $\Longrightarrow$ (282, 2)(163, 5) $\Longrightarrow$ 
						\textcolor{red}{5}00\textcolor{red}{2}06452401
				\item[37-] (282,GUA), (163,AGA) $\Longrightarrow$ (282, 3)(163, 5) $\Longrightarrow$ 
						\textcolor{red}{5}00\textcolor{red}{3}06452401
				\item[38-] (282,GUG), (163,AGA) $\Longrightarrow$ (282, 4)(163, 5) $\Longrightarrow$ 
						\textcolor{red}{5}00\textcolor{red}{4}06452401						
				\item[39-] (282,GUU), (163,AGG) $\Longrightarrow$ (282, 1)(163, 6) $\Longrightarrow$ 
						\textcolor{red}{6}00\textcolor{red}{1}06452401
				\item[40-] (282,GUC), (163,AGG) $\Longrightarrow$ (282, 2)(163, 6) $\Longrightarrow$ 
						\textcolor{red}{6}00\textcolor{red}{2}06452401
				\item[41-] (282,GUA), (163,AGG) $\Longrightarrow$ (282, 3)(163, 6) $\Longrightarrow$ 
						\textcolor{red}{6}00\textcolor{red}{3}06452401
				\item[42-] (282,GUG), (163,AGG) $\Longrightarrow$ (282, 4)(163, 6) $\Longrightarrow$ 
						\textcolor{red}{6}00\textcolor{red}{4}06452401						
				\item[43-] (282,GUU), (168,GAA) $\Longrightarrow$ (282, 1)(168, 1) $\Longrightarrow$ 
						000\textcolor{red}{1}\textcolor{red}{1}6452401
				\item[44-] (282,GUC), (168,GAA) $\Longrightarrow$ (282, 2)(168, 1) $\Longrightarrow$ 
						000\textcolor{red}{2}\textcolor{red}{1}6452401
				\item[45-] (282,GUA), (168,GAA) $\Longrightarrow$ (282, 3)(168, 1) $\Longrightarrow$ 
						000\textcolor{red}{3}\textcolor{red}{1}6452401
				\item[46-] (282,GUG), (168,GAA) $\Longrightarrow$ (282, 4)(168, 1) $\Longrightarrow$ 
						000\textcolor{red}{4}\textcolor{red}{1}6452401						
				\item[47-] (282,GUU), (168,GAG) $\Longrightarrow$ (282, 1)(168, 2) $\Longrightarrow$ 
						000\textcolor{red}{1}\textcolor{red}{2}6452401
				\item[48-] (282,GUC), (168,GAG) $\Longrightarrow$ (282, 2)(168, 2) $\Longrightarrow$ 
						000\textcolor{red}{2}\textcolor{red}{2}6452401
				\item[49-] (282,GUA), (168,GAG) $\Longrightarrow$ (282, 3)(168, 2) $\Longrightarrow$ 
						000\textcolor{red}{3}\textcolor{red}{2}6452401
				\item[50-] (282,GUG), (168,GAG) $\Longrightarrow$ (282, 4)(168, 2) $\Longrightarrow$ 
						000\textcolor{red}{4}\textcolor{red}{2}6452401					
				\item[51-] (213,UUU), (172,GUU), (163,CGU) $\Longrightarrow$ (213,1), (172,1), (163,1) 
							$\Longrightarrow$ \textcolor{red}{1}\textcolor{red}{1}\textcolor{red}{1}006452401
				\item[52-] (213,UUC), (172,GUU), (163,CGU) $\Longrightarrow$ (213,2), (172,1), (163,1) 
							$\Longrightarrow$ \textcolor{red}{1}\textcolor{red}{1}\textcolor{red}{2}006452401			
				\item[53-] (213,UUU), (172,GUC), (163,CGU) $\Longrightarrow$ (213,1), (172,2), (163,1) 
							$\Longrightarrow$ \textcolor{red}{1}\textcolor{red}{2}\textcolor{red}{1}006452401
				\item[54-] (213,UUC), (172,GUC), (163,CGU) $\Longrightarrow$ (213,2), (172,2), (163,1) 
							$\Longrightarrow$ \textcolor{red}{1}\textcolor{red}{2}\textcolor{red}{2}006452401			
				\item[55-] (213,UUU), (172,GUA), (163,CGU) $\Longrightarrow$ (213,1), (172,3), (163,1) 
							$\Longrightarrow$ \textcolor{red}{1}\textcolor{red}{3}\textcolor{red}{1}006452401
				\item[56-] (213,UUC), (172,GUA), (163,CGU) $\Longrightarrow$ (213,2), (172,3), (163,1) 
							$\Longrightarrow$ \textcolor{red}{1}\textcolor{red}{3}\textcolor{red}{2}006452401			
				\item[57-] (213,UUU), (172,GUG), (163,CGU) $\Longrightarrow$ (213,1), (172,4), (163,1) 
							$\Longrightarrow$ \textcolor{red}{1}\textcolor{red}{4}\textcolor{red}{1}006452401
				\item[58-] (213,UUC), (172,GUG), (163,CGU) $\Longrightarrow$ (213,2), (172,4), (163,1) 
							$\Longrightarrow$ \textcolor{red}{1}\textcolor{red}{4}\textcolor{red}{2}006452401			
				\item[59-] (213,UUU), (172,GUU), (163,CGC) $\Longrightarrow$ (213,1), (172,1), (163,2) 
							$\Longrightarrow$ \textcolor{red}{2}\textcolor{red}{1}\textcolor{red}{1}006452401
				\item[60-] (213,UUC), (172,GUU), (163,CGC) $\Longrightarrow$ (213,2), (172,1), (163,2) 
							$\Longrightarrow$ \textcolor{red}{2}\textcolor{red}{1}\textcolor{red}{2}006452401			
				\item[61-] (213,UUU), (172,GUC), (163,CGC) $\Longrightarrow$ (213,1), (172,2), (163,2) 
							$\Longrightarrow$ \textcolor{red}{2}\textcolor{red}{2}\textcolor{red}{1}006452401
				\item[62-] (213,UUC), (172,GUC), (163,CGC) $\Longrightarrow$ (213,2), (172,2), (163,2) 
							$\Longrightarrow$ \textcolor{red}{2}\textcolor{red}{2}\textcolor{red}{2}006452401		
				\item[63-] (213,UUU), (172,GUA), (163,CGC) $\Longrightarrow$ (213,1), (172,3), (163,2) 
							$\Longrightarrow$ \textcolor{red}{2}\textcolor{red}{3}\textcolor{red}{1}006452401
				\item[64-] (213,UUC), (172,GUA), (163,CGC) $\Longrightarrow$ (213,2), (172,3), (163,2) 
							$\Longrightarrow$ \textcolor{red}{2}\textcolor{red}{3}\textcolor{red}{2}006452401		
				\item[65-] (213,UUU), (172,GUG), (163,CGC) $\Longrightarrow$ (213,1), (172,4), (163,2) 
							$\Longrightarrow$ \textcolor{red}{2}\textcolor{red}{4}\textcolor{red}{1}006452401
				\item[66-] (213,UUC), (172,GUG), (163,CGC) $\Longrightarrow$ (213,2), (172,4), (163,2) 
							$\Longrightarrow$ \textcolor{red}{2}\textcolor{red}{4}\textcolor{red}{2}006452401			
				\item[67-] (213,UUU), (172,GUU), (163,CGA) $\Longrightarrow$ (213,1), (172,1), (163,3) 
							$\Longrightarrow$ \textcolor{red}{3}\textcolor{red}{1}\textcolor{red}{1}006452401
				\item[68-] (213,UUC), (172,GUU), (163,CGA) $\Longrightarrow$ (213,2), (172,1), (163,3) 
							$\Longrightarrow$ \textcolor{red}{3}\textcolor{red}{1}\textcolor{red}{2}006452401		
				\item[69-] (213,UUU), (172,GUC), (163,CGA) $\Longrightarrow$ (213,1), (172,2), (163,3) 
							$\Longrightarrow$ \textcolor{red}{3}\textcolor{red}{2}\textcolor{red}{1}006452401
				\item[70-] (213,UUC), (172,GUC), (163,CGA) $\Longrightarrow$ (213,2), (172,2), (163,3) 
							$\Longrightarrow$ \textcolor{red}{3}\textcolor{red}{2}\textcolor{red}{2}006452401		
				\item[71-] (213,UUU), (172,GUA), (163,CGA) $\Longrightarrow$ (213,1), (172,3), (163,3) 
							$\Longrightarrow$ \textcolor{red}{3}\textcolor{red}{3}\textcolor{red}{1}006452401
				\item[72-] (213,UUC), (172,GUA), (163,CGA) $\Longrightarrow$ (213,2), (172,3), (163,3) 
							$\Longrightarrow$ \textcolor{red}{3}\textcolor{red}{3}\textcolor{red}{2}006452401			
				\item[73-] (213,UUU), (172,GUG), (163,CGA) $\Longrightarrow$ (213,1), (172,4), (163,3) 
							$\Longrightarrow$ \textcolor{red}{3}\textcolor{red}{4}\textcolor{red}{1}006452401
				\item[74-] (213,UUC), (172,GUG), (163,CGA) $\Longrightarrow$ (213,2), (172,4), (163,3) 
							$\Longrightarrow$ \textcolor{red}{3}\textcolor{red}{4}\textcolor{red}{2}006452401		
				\item[75-] (213,UUU), (172,GUU), (163,CGG) $\Longrightarrow$ (213,1), (172,1), (163,4) 
							$\Longrightarrow$ \textcolor{red}{4}\textcolor{red}{1}\textcolor{red}{1}006452401
				\item[76-] (213,UUC), (172,GUU), (163,CGG) $\Longrightarrow$ (213,2), (172,1), (163,4) 
							$\Longrightarrow$ \textcolor{red}{4}\textcolor{red}{1}\textcolor{red}{2}006452401			
				\item[77-] (213,UUU), (172,GUC), (163,CGG) $\Longrightarrow$ (213,1), (172,2), (163,4) 
							$\Longrightarrow$ \textcolor{red}{4}\textcolor{red}{2}\textcolor{red}{1}006452401
				\item[78-] (213,UUC), (172,GUC), (163,CGG) $\Longrightarrow$ (213,2), (172,2), (163,4) 
							$\Longrightarrow$ \textcolor{red}{4}\textcolor{red}{2}\textcolor{red}{2}006452401			
				\item[79-] (213,UUU), (172,GUA), (163,CGG) $\Longrightarrow$ (213,1), (172,3), (163,4) 
							$\Longrightarrow$ \textcolor{red}{4}\textcolor{red}{3}\textcolor{red}{1}006452401
				\item[80-] (213,UUC), (172,GUA), (163,CGG) $\Longrightarrow$ (213,2), (172,3), (163,4) 
							$\Longrightarrow$ \textcolor{red}{4}\textcolor{red}{3}\textcolor{red}{2}006452401		
				\item[81-] (213,UUU), (172,GUG), (163,CGG) $\Longrightarrow$ (213,1), (172,4), (163,4) 
							$\Longrightarrow$ \textcolor{red}{4}\textcolor{red}{4}\textcolor{red}{1}006452401
				\item[82-] (213,UUC), (172,GUG), (163,CGG) $\Longrightarrow$ (213,2), (172,4), (163,4) 
							$\Longrightarrow$ \textcolor{red}{4}\textcolor{red}{4}\textcolor{red}{2}006452401			
				\item[83-] (213,UUU), (172,GUU), (163,AGA) $\Longrightarrow$ (213,1), (172,1), (163,5) 
							$\Longrightarrow$ \textcolor{red}{5}\textcolor{red}{1}\textcolor{red}{1}006452401
				\item[84-] (213,UUC), (172,GUU), (163,AGA) $\Longrightarrow$ (213,2), (172,1), (163,5) 
							$\Longrightarrow$ \textcolor{red}{5}\textcolor{red}{1}\textcolor{red}{2}006452401		
				\item[85-] (213,UUU), (172,GUC), (163,AGA) $\Longrightarrow$ (213,1), (172,2), (163,5) 
							$\Longrightarrow$ \textcolor{red}{5}\textcolor{red}{2}\textcolor{red}{1}006452401
				\item[86-] (213,UUC), (172,GUC), (163,AGA) $\Longrightarrow$ (213,2), (172,2), (163,5) 
							$\Longrightarrow$ \textcolor{red}{5}\textcolor{red}{2}\textcolor{red}{2}006452401			
				\item[87-] (213,UUU), (172,GUA), (163,AGA) $\Longrightarrow$ (213,1), (172,3), (163,5) 
							$\Longrightarrow$ \textcolor{red}{5}\textcolor{red}{3}\textcolor{red}{1}006452401
				\item[88-] (213,UUC), (172,GUA), (163,AGA) $\Longrightarrow$ (213,2), (172,3), (163,5) 
							$\Longrightarrow$ \textcolor{red}{5}\textcolor{red}{3}\textcolor{red}{2}006452401		
				\item[89-] (213,UUU), (172,GUG), (163,AGA) $\Longrightarrow$ (213,1), (172,4), (163,5) 
							$\Longrightarrow$ \textcolor{red}{5}\textcolor{red}{4}\textcolor{red}{1}006452401
				\item[90-] (213,UUC), (172,GUG), (163,AGA) $\Longrightarrow$ (213,2), (172,4), (163,5) 
							$\Longrightarrow$ \textcolor{red}{5}\textcolor{red}{4}\textcolor{red}{2}006452401			
				\item[91-] (213,UUU), (172,GUU), (163,AGG) $\Longrightarrow$ (213,1), (172,1), (163,6) 
							$\Longrightarrow$ \textcolor{red}{6}\textcolor{red}{1}\textcolor{red}{1}006452401
				\item[92-] (213,UUC), (172,GUU), (163,AGG) $\Longrightarrow$ (213,2), (172,1), (163,6) 
							$\Longrightarrow$ \textcolor{red}{6}\textcolor{red}{1}\textcolor{red}{2}006452401			
				\item[93-] (213,UUU), (172,GUC), (163,AGG) $\Longrightarrow$ (213,1), (172,2), (163,6) 
							$\Longrightarrow$ \textcolor{red}{6}\textcolor{red}{2}\textcolor{red}{1}006452401
				\item[94-] (213,UUC), (172,GUC), (163,AGG) $\Longrightarrow$ (213,2), (172,2), (163,6) 
							$\Longrightarrow$ \textcolor{red}{6}\textcolor{red}{2}\textcolor{red}{2}006452401			
				\item[95-] (213,UUU), (172,GUA), (163,AGG) $\Longrightarrow$ (213,1), (172,3), (163,6) 
							$\Longrightarrow$ \textcolor{red}{6}\textcolor{red}{3}\textcolor{red}{1}006452401
				\item[96-] (213,UUC), (172,GUA), (163,AGG) $\Longrightarrow$ (213,2), (172,3), (163,6) 
							$\Longrightarrow$ \textcolor{red}{6}\textcolor{red}{3}\textcolor{red}{2}006452401			
				\item[97-] (213,UUU), (172,GUG), (163,AGG) $\Longrightarrow$ (213,1), (172,4), (163,6) 
							$\Longrightarrow$ \textcolor{red}{6}\textcolor{red}{4}\textcolor{red}{1}006452401
				\item[98-] (213,UUC), (172,GUG), (163,AGG) $\Longrightarrow$ (213,2), (172,4), (163,6) 
							$\Longrightarrow$ \textcolor{red}{6}\textcolor{red}{4}\textcolor{red}{2}006452401			
				\item[99-] (213,UUU), (172,GUU), (168,GAA) $\Longrightarrow$ (213,1), (172,1), (168,1) 
							$\Longrightarrow$ 0\textcolor{red}{1}\textcolor{red}{1}0\textcolor{red}{1}6452401
				\item[100-] (213,UUC), (172,GUU), (168,GAA) $\Longrightarrow$ (213,2), (172,1), (168,1) 
							$\Longrightarrow$ 0\textcolor{red}{1}\textcolor{red}{2}0\textcolor{red}{1}6452401			
				\item[101-] (213,UUU), (172,GUC), (168,GAA) $\Longrightarrow$ (213,1), (172,2), (168,1) 
							$\Longrightarrow$ 0\textcolor{red}{2}\textcolor{red}{1}0\textcolor{red}{1}6452401
				\item[102-] (213,UUC), (172,GUC), (168,GAA) $\Longrightarrow$ (213,2), (172,2), (168,1) 
							$\Longrightarrow$ 0\textcolor{red}{2}\textcolor{red}{2}0\textcolor{red}{1}6452401			
				\item[103-] (213,UUU), (172,GUA), (168,GAA) $\Longrightarrow$ (213,1), (172,3), (168,1) 
							$\Longrightarrow$ 0\textcolor{red}{3}\textcolor{red}{1}0\textcolor{red}{1}6452401
				\item[104-] (213,UUC), (172,GUA), (168,GAA) $\Longrightarrow$ (213,2), (172,3), (168,1) 
							$\Longrightarrow$ 0\textcolor{red}{3}\textcolor{red}{2}0\textcolor{red}{1}6452401			
				\item[105-] (213,UUU), (172,GUG), (168,GAA) $\Longrightarrow$ (213,1), (172,4), (168,1) 
							$\Longrightarrow$ 0\textcolor{red}{4}\textcolor{red}{1}0\textcolor{red}{1}6452401
				\item[106-] (213,UUC), (172,GUG), (168,GAA) $\Longrightarrow$ (213,2), (172,4), (168,1) 
							$\Longrightarrow$ 0\textcolor{red}{4}\textcolor{red}{2}0\textcolor{red}{1}6452401			
				\item[107-] (213,UUU), (172,GUU), (168,GAG) $\Longrightarrow$ (213,1), (172,1), (168,2) 
							$\Longrightarrow$ 0\textcolor{red}{1}\textcolor{red}{1}0\textcolor{red}{2}6452401
				\item[108-] (213,UUC), (172,GUU), (168,GAG) $\Longrightarrow$ (213,2), (172,1), (168,2) 
							$\Longrightarrow$ 0\textcolor{red}{1}\textcolor{red}{2}0\textcolor{red}{2}6452401			
				\item[109-] (213,UUU), (172,GUC), (168,GAG) $\Longrightarrow$ (213,1), (172,2), (168,2) 
							$\Longrightarrow$ 0\textcolor{red}{2}\textcolor{red}{1}0\textcolor{red}{2}6452401
				\item[110-] (213,UUC), (172,GUC), (168,GAG) $\Longrightarrow$ (213,2), (172,2), (168,2) 
							$\Longrightarrow$ 0\textcolor{red}{2}\textcolor{red}{2}0\textcolor{red}{2}6452401			
				\item[111-] (213,UUU), (172,GUA), (168,GAG) $\Longrightarrow$ (213,1), (172,3), (168,2) 
							$\Longrightarrow$ 0\textcolor{red}{3}\textcolor{red}{1}0\textcolor{red}{2}6452401
				\item[112-] (213,UUC), (172,GUA), (168,GAG) $\Longrightarrow$ (213,2), (172,3), (168,2) 
							$\Longrightarrow$ 0\textcolor{red}{3}\textcolor{red}{2}0\textcolor{red}{2}6452401			
				\item[113-] (213,UUU), (172,GUG), (168,GAG) $\Longrightarrow$ (213,1), (172,4), (168,2) 
							$\Longrightarrow$ 0\textcolor{red}{4}\textcolor{red}{1}0\textcolor{red}{2}6452401
				\item[114-] (213,UUC), (172,GUG), (168,GAG) $\Longrightarrow$ (213,2), (172,4), (168,2) 
							$\Longrightarrow$ 0\textcolor{red}{4}\textcolor{red}{2}0\textcolor{red}{2}6452401		
	
		\end{itemize}
					\end{flushleft}
				\end{scriptsize}
	\item [3-] Para cada mutante (n\'umero en base mixta) del paso anterior, se calcula su \textit{Identificador}.\\
			Seg\'un el paso 7.4 de la Soluci\'on Propuesta \ref{SP}, el \textit{Id} para una mutante dada se calcula 
			de la siguiente manera:\\
			
			 id += mutant[i-1]*coefficients[\#coefficients-i] para $1 \leq i \leq \# coefficients$, en este caso 
			 particular \#coefficients = 12 \ref{tabla_coeficientes}.
			
			Para una mejor lectura del ejemplo, solo vamos a mostrar el calculo del \textit{Identificador} de la 
			primer mutante resultante, es decir: 100006452401\\
			
			1*79380000 + 0*15876000 + 0*5292000 + 0*1058400 + 0*352800 + 6*50400 + 4*10080 + 5*1440 + 2*160 +
			4*20 + 0*4 + 1*1 = 79730321
			
\end{itemize}

\subsection{Experimento 3: Calcular las mutantes alcanzables partiendo de la secuencia inicial \textbf{hxb2}}

\begin{itemize}
	\item [1-] \textbf{Dada la secuencia inicial (hxb2)}:
	\begin{scriptsize}
CCCATTAGCCCTATTGAGACTGTACCAGTAAAATTAAAGCCAGGAATG
GATGGCCCAAAAGTTAAACAATGGCCATTGACAGAAGAAAAAATAAAAGCATTAGTAGAAATTTGTACAG
AGATGGAAAAGGAAGGGAAAATTTCAAAAATTGGGCCTGAAAATCCATACAATACTCCAGTATTTGCCAT
AAAGAAAAAAGACAGTACTAAATGGAGAAAATTAGTAGATTTCAGAGAACTTAATAAGAGAACTCAAGAC
TTCTGGGAAGTTCAATTAGGAATACCACATCCCGCAGGGTTAAAAAAGAAAAAATCAGTAACAGTACTGG
ATGTGGGTGATGCATATTTTTCAGTTCCCTTAGATGAAGACTTCAGGAAGTATACTGCATTTACCATACC
TAGTATAAACAATGAGACACCAGGGATTAGATATCAGTACAATGTGCTTCCACAGGGATGGAAAGGATCA
CCAGCAATATTCCAAAGTAGCATGACAAAAATCTTAGAGCCTTTTAGAAAACAAAATCCAGACATAGTTA
TCTATCAATACATGGATGATTTGTATGTAGGATCTGACTTAGAAATAGGGCAGCATAGAACAAAAATAGA
GGAGCTGAGACAACATCTGTTGAGGTGGGGACTTACCACACCAGACAAAAAACATCAGAAAGAACCTCCA
TTCCTTTGGATGGGTTATGAACTCCATCCTGATAAATGGACAGTACAGCCTATAGTGCTGCCAGAAAAAA
CAGCTGGACTGTCAATGACATACAGAAGTTAGTGGGGAAATTGAATTGGGCAAGTCAGATTTACCCAGGG
ATTAAAGTAAGGCAATTATGTAAACTCCTTAGAGGAACCAAAGCACTAACAGAAGTAATACCACTAACAG
AAGAAGCAGAGCTAGAACTGGCAGAAAACAGAGAGATTCTAAAAGAACCAGTACATGGAGTGTATTATGA
CCCATCAAAAGACTTAATAGCAGAAATACAGAAGCAGGGGCAAGGCCAATGGACATATCAAATTTATCAA
GAGCCATTTAAAAATCTGAAAACAGGAAAATATGCAAGAATGAGGGGTGCCCACACTAATGATGTAAAAC
AATTAACAGAGGCAGTGCAAAAAATAACCACAGAAAGCATAGTAATATGGGGAAAGACTCCTAAATTTAAAC
	\end{scriptsize}
	\item [2-] El siguiente paso es aplicar una combinaci\'on de \textit{ARVs} a la secuencia del paso 1 (tal como se mostr\'o en el experimento 2), obteniendo como resultado un conjunto de mutantes resultantes de dicha aplicaci\'on.
Para cada mutante resultante se repite el proceso de aplicar una combinaci\'on de \textit{ARVs}, agregando las mutantes resultantes al conjunto resultado. Este proceso se repite hasta que a cada mutante en el conjunto resultado no se le puedan aplicar m\'as \textit{ARVs}.\\
\textit{Aclaraci\'on: A cada mutante en el conjunto resultado se le aplica una combinaci\'on de \textbf{ARVs} solo una vez.}\\
\end{itemize}
Teniendo en cuenta que la cantidad total de mutantes posibles es 555659999 (como se mostr\'o al comienzo de esta secci\'on), utilizando la secuencia inicial del paso 1 y obtener todas las mutantes alcanzables (seg\'un paso 2), el conjunto de mutantes resultantes se ve reducido a 53137 mutantes.

\section{Pruebas de c\'odigo}

\subsection{Introducci\'on}
Las pruebas de software es el proceso de ejecuci\'on de un programa o sistema con la intenci\'on de encontrar errores.\cite{Myers79} O bien, involucra cualquier actividad dirigida a la evaluaci\'on de un atributo o la capacidad de un programa o sistema y la determinaci\'on de que cumple con los resultados requeridos.\cite{Hetzel88} \\
Hay muchos tipos diferentes de pruebas de software, pero las dos principales categor\'ias son las pruebas din\'amicas y pruebas est\'aticas.\\
Prueba din\'amica es una evaluaci\'on que se lleva a cabo mientras se ejecuta el programa, las pruebas est\'aticas, por el contrario, es un examen del c\'odigo del programa y la documentaci\'on asociada. Los m\'etodos din\'amicos y est\'aticos se utilizan a menudo juntos.\\

\subsection{Google Test}
Para las pruebas din\'amicas del software construido se utiliz\'o la herramienta 
\textbf{Google Test}\footnote{code.google.com/p/googletest/wiki/}, la cu\'al permite escribir afirmaciones que son sentencias que chequean si una condici\'on es verdadera. El resultado de una afirmaci\'on puede ser el \textit{\'exito}, \textit{error fatal}, o \textit{error no fatal}. Si se produce un \textit{error fatal} se aborta la funci\'on actual, en caso de ocurrir un \textit{error no fatal} se reporta dicho fallo y se contin\'ua con la ejecuci\'on, en caso de \textit{\'exito} el programa contin\'ua normalmente.
Un caso de prueba contiene una o varias pruebas. Las pruebas se agrupan dentro de \textit{casos de pruebas} que reflejan la estructura del c\'odigo probado.
  
\subsubsection{Casos de pruebas realizados}

\begin{itemize}

\item[1-] \textbf{Join:} Esta prueba verifica que el agrupado de las posiciones de resistencias con sus respectivos amino\'acidos y codones sea el esperado.
\begin{lstlisting}[language=C++,keywordstyle=\color{blue}, 
								morekeywords={TEST, join_antivirals}]

TEST(Test_biLAV, Join)	
{
	PossibleMutants::Pos_Aminoacids_Triplets_Container join_all_antivirals;
	db.load_file("./ref/antivirals_biLAV.xml");
	db.get_antivirals(antivirals);

    //Posiciones de resistencias esperadas
	const int positions_expect[12] = {163, 172, 213, 282, 168, 49, 83, 87, 46, 53, 75, 31};

    //Cantidad de aminoacidos esperados por posicion
	const int cant_amins_for_positions_expect[12] = {1, 1 1, 1, 1, 1, 1, 1, 2, 2, 1, 1};
	
    //Aminoacidos esperados por posicion
	const char* amins_expect[14] = {"r", "v", "f", "v", "e", "l", "v", "s", "v", "a", "m",
									"l", "v", "i"};
    //Cantidad de codones esperados por posicion
	const int cant_triplets_expect[14] = {6, 4, 2, 4, 2, 6, 4, 6, 4, 4, 1, 6, 4, 3};
	
    //Codones esperados para cada aminoacido, segun su posicion
	const char* triplets_expect[56] = {"CGU","CGC","CGA","CGG","AGA","AGG","GUU","GUC","GUA",
	                                   "GUG","UUU","UUC","GUU","GUC","GUA","GUG","GAA","GAG",
	                                   "UUA","UUG","CUU","CUC","CUA","CUG","GUU","GUC","GUA",
	                                   "GUG","UCU","UCC","UCA","UCG","AGU","AGC","GUU","GUC",
	                                   "GUA","GUG","GCU","GCC","GCA","GCG","AUG","UUA","UUG",
	                                   "CUU","CUC","CUA","CUG","GUU","GUC","GUA","GUG","AUU",
	                                   "AUC","AUA"};
	
    //Cantidad de antivirales cargados desde la Base de Datos
	ASSERT_EQ(antivirals.size(), 5);
	antivirals.join_antivirals(join_all_antivirals);
	
    //Cantidad de posiciones agrupadas
	ASSERT_EQ(join_all_antivirals.size(), 12);
	PossibleMutants::Pos_Aminoacids_Triplets_Container::const_iterator it_join;
	PossibleMutants::Aminoacid_Triplets_Container amins_triplets;
	PossibleMutants::Aminoacid_Triplets_Container::const_iterator it_amin_triplets;
	PossibleMutants::Triplet_Vector triplets;
	Triplet_Container::const_iterator it_triplets;
	size_t i = 0;
	size_t j = 0;
	size_t m = 0;
	for(it_join = join_all_antivirals.begin(); it_join != join_all_antivirals.end(); 
	++it_join)
	{
        //Se verifican las posiciones de resistencia agrupadas
		EXPECT_EQ(it_join->pos_resistence, positions_expect[i]);
		amins_triplets = it_join->aminoacids_triplets;
		
        //Se verifica la cantidad de aminoacidos agrupados para la posicion corriente
		ASSERT_EQ(amins_triplets.size(), cant_amins_for_positions_expect[i]);
		for(it_amin_triplets = amins_triplets.begin(); it_amin_triplets != amins_triplets.end();
		   ++it_amin_triplets)
		{
            //Se verifican los aminoacidos agrupados para la posicion corriente
			EXPECT_STREQ((it_amin_triplets->aminoacid).c_str(), amins_expect[j]);
			triplets = it_amin_triplets->triplets;
			
            //Se verifica la cantidad de codones correspondientes al aminoacido corriente
			ASSERT_EQ(triplets.size(), cant_triplets_expect[j]);
			for(size_t k = 0; k < triplets.size(); ++k)
			{
                //Se verifican los codones correspondientes al aminoacido corriente
				EXPECT_STREQ((triplets[k].to_string()).c_str(), triplets_expect[m]);
				++m;
			}
			++j;
		}
		++i;
	}
}
\end{lstlisting}

\item[2-] \textbf{BasesMutants\_And\_Coefficients:} Esta prueba verifica que las bases que forman el numero en base mixta (mutante) y el vector de coeficientes (utilizado para calcular el identificador de cada mutante) sean correctos.
\begin{lstlisting}[language=C++,keywordstyle=\color{blue}, 
								morekeywords={TEST, get_base, get_coefficient}]
TEST(Test_biLAV, BasesMutants_And_Coefficients)
{
	PossibleMutants::Pos_Aminoacids_Triplets_Container join_all_antivirals;
	antivirals.join_antivirals(join_all_antivirals);
	
	//Bases esperadas
	const int values_bases_expect[12] = {7, 5, 3, 5, 3, 7, 5, 7, 9, 8, 5, 4};
	
	//Coeficientes esperados
	const uint64_t values_coefficient_expect[12] = {1, 4, 20, 160, 1440, 10080, 50400, 352800,
	                                                1058400, 5292000, 15876000, 79380000};
	PossibleMutants* possible_mutants = new PossibleMutants(join_all_antivirals);
	
	//Verifica el tamanio de la mutante (cantidad de bases que forman el numero)
	ASSERT_EQ(possible_mutants->get_mutantSize(), 12);
	
	//Verifica la cantidades de bases que forman el numero en base mixta
	ASSERT_EQ(possible_mutants->get_numberBases(), 12);
	
	//Verifica la cantidad de coeficientes
	ASSERT_EQ(possible_mutants->get_numberMutants_coefficients(), 12);
	
	//Verifica la cantidad de mutantes posibles
	ASSERT_EQ(possible_mutants->get_maxNumber_mutants(), 555659999);
	for(size_t i = 0; i < possible_mutants->get_mutantSize(); ++i)
	{
	    //Verifica que la base corriente sea correcta
		EXPECT_EQ(possible_mutants->get_base(i), values_bases_expect[i]);
		
		//Verifica que el coeficiente corriente sea correcto
		EXPECT_EQ(possible_mutants->get_coefficient(i), values_coefficient_expect[i]);
	}
	delete(possible_mutants);
}
\end{lstlisting}

\item[3-] \textbf{Applicable\_and\_Mutants:} Esta prueba verifica que los antivirales que aplican a la mutante cuyo identificador es: 350321 sean correctos. Tambi\'en comprueba las mutantes resultantes de aplicar dichos antivirales a la mutante 350321.
\begin{lstlisting}[language=C++,keywordstyle=\color{blue}, 
								morekeywords={TEST, get_applicable, get_mutants}]
TEST(Test_biLAV, Applicable_and_Mutants)
{
	Arvs_Set::const_iterator it_arvs;
	PossibleMutants::Populations_Ids::const_iterator it_mutant;
	PossibleMutants::Populations_Ids mutants;
	AntiviralSet antivirals_applicable;
	PossibleMutants::Id current_id;
	PossibleMutants::Id id = 350321;
	
	//Antivirales aplicables esperados
	const char* first_arvs_expect [2] = {"Abacavir", "Tenofovir"};
	antivirals.get_applicable(id, antivirals_applicable);
	
	//Verifica la cantidad de antivirales aplicables a la mutante 350321
	ASSERT_EQ(antivirals_applicable.size(), 2);
	size_t i = 0;
	std::string av_name;
	for(it_arvs = antivirals_applicable.begin(); it_arvs != antivirals_applicable.end(); 
	++it_arvs)
	{
        (*it_arvs)->get_attrib("name", av_name);
        
        //Verifica que el antiviral corriente sea correcto
		EXPECT_STREQ(av_name.c_str(), first_arvs_expect[i]);
		++i;
	}
	
	//Mutantes esperadas de la aplicacion de los antivirales "Abacavir" y "Tenofovir"
	const PossibleMutants::Id mutants_expect [114] = {79730321,159110321,238490321,317870321,
	 397250321, 476630321, 80083121, 80435921, 159463121, 159815921, 238843121, 239195921,
	 318223121, 318575921, 397603121, 397955921, 476983121, 477335921, 80788721, 81847121, 
	 82905521, 83963921, 160168721, 161227121, 162285521, 163343921, 239548721, 240607121, 
	 241665521, 242723921, 318928721, 319987121, 321045521, 322103921, 398308721, 399367121, 
	 400425521, 401483921, 477688721, 478747121, 479805521, 480863921, 1761521, 2819921,
	 3878321, 4936721, 2114321, 3172721, 4231121, 5289521, 100898321, 106190321, 116774321,
	 122066321, 132650321, 137942321, 148526321, 153818321, 180278321, 185570321, 196154321,
	 201446321, 212030321, 217322321, 227906321, 233198321, 259658321, 264950321, 275534321,
	 280826321, 291410321, 296702321, 307286321, 312578321, 339038321,	344330321, 354914321,
	 360206321, 370790321, 376082321, 386666321, 391958321, 418418321, 423710321, 434294321,
	 439586321, 450170321, 455462321, 466046321, 471338321, 497798321, 503090321, 513674321,
	 518966321, 529550321, 534842321, 545426321, 550718321, 21871121, 27163121, 37747121, 
	 43039121, 53623121, 58915121, 69499121, 74791121, 22223921, 27515921, 38099921, 43391921,
	 53975921, 59267921, 69851921, 75143921};

	antivirals.get_mutants(antivirals_applicable, id, mutants);
	
	//Verifica la cantidad de mutantes resultantes
	ASSERT_EQ(mutants.size(), 114);
	i = 0;
	for(it_mutant = mutants.begin(); it_mutant != mutants.end(); ++it_mutant)
	{
		current_id = *it_mutant;
		
		//Verifica que la mutante resultante corriente sea correcta
		EXPECT_EQ(current_id, mutants_expect[i]);
		++i;
	}
}			
\end{lstlisting}

\item[4-] \textbf{sequence\_from\_id\_AND\_id\_from\_sequence:} Esta prueba verifica que el identificador asignado a una secuencia mutante sea correcto. Tambi\'en comprueba que dado un identificador y una secuencia mutante, se retorne una nueva secuencia mutante correspondiente al identificador.\\
Aclaraci\'on: En este caso la mutante es representada como una secuencia de codones.
\begin{lstlisting}[language=C++,keywordstyle=\color{blue}, 
								morekeywords={TEST, get_sequence_from_id, get_id_from_sequence}]
TEST(Test_biLAV, sequence_from_id_AND_id_from_sequence)
{
	biopp::NucSequence sequence;
	biopp::PseudoNucSequence pseudo_sequence;
	PossibleMutants::Id id = 350321; 
	load_sequence("./ref/init_seq_biLAV.txt", pseudo_sequence);
	pseudoNucSequence_to_nucSequence(pseudo_sequence, sequence);
	
	//Se obtiene la secuencia mutante que representa id
	antivirals.get_sequence_from_id(id, sequence);
	
	//Se verifica que el identificador de la secuencia mutante sea el esperado
	EXPECT_EQ(id, antivirals.get_id_from_sequence(sequence));
}
\end{lstlisting}

\item[5-] \textbf{get\_applicable\_populations\_AND\_get\_mutants\_populations:} Esta prueba verifica que dada poblaciones de mutantes, se retornen los antivirales que aplican a todas las mutantes a la vez. Tambi\'en comprueba que las mutantes resultantes de aplicar dichos antivirales en la poblaci\'on mutante sean las esperadas.
\begin{lstlisting}[language=C++,keywordstyle=\color{blue}, 
								morekeywords={TEST, get_applicable_populations, get_mutants_populations}]
TEST(Test_biLAV, get_applicable_populations_AND_get_mutants_populations)
{
	AntiviralSet antivirals_applicable;
	PossibleMutants::Populations_Ids all_mutants;
	PossibleMutants::Populations_Ids ids;
	PossibleMutants::Id id1 = 350321;
	PossibleMutants::Id id2 = 2;
	PossibleMutants::Id id3 = 1;
	mili::insert_into(ids, id1);
	mili::insert_into(ids, id2);
	mili::insert_into(ids, id3);
	antivirals.get_applicable_populations(ids, antivirals_applicable);
	
	//Verifica que la cantidad de antivirales que aplican sean correctos
	EXPECT_EQ(antivirals_applicable.size(), 2);
	antivirals.get_mutants_populations(ids, antivirals_applicable, all_mutants);
	
	//Verifica que la cantidad de mutantes resultantes sea correcta
	EXPECT_EQ(all_mutants.size(), 342);
}
\end{lstlisting}

\item[6-] \textbf{get\_mutants\_catch\_up:} Esta prueba verifica que las mutantes alcanzables desde un identificador sean las esperadas.
\begin{lstlisting}[language=C++,keywordstyle=\color{blue}, 
								morekeywords={TEST,get_mutants_catch_up}]
TEST(Test_biLAV, get_mutants_catch_up)
{
	PossibleMutants::Populations_Ids mutants_catch_up;
	PossibleMutants::Id id = 350321;
	antivirals.get_mutants_catch_up(id, mutants_catch_up);
	
	//Verifica que la cantidad de mutantes alcanzables sea correcta
	EXPECT_EQ(mutants_catch_up.size(), 115);
}
\end{lstlisting}

\subsubsection{Conclusiones de las pruebas realizadas}
Las pruebas realizadas a las distintas funcionalidades se fueron generando a medida que \'estas eran creadas, esto permiti\'o hacer una correcci\'on de las fallas en forma inmediata, evitando que se genere una acumulaci\'on de las mismas y asegurando que toda nueva funcionalidad que dependiese de otra creada anteriormente no herede errores.\\
Cabe resaltar que las pruebas realizadas con \textbf{Google Test} son automatizadas, es decir que permiten ejecutarse cada vez que sea necesario, garantizando que en cada modificaci\'on del c\'odigo el mismo se mantenga verificado.\\
La identificaci\'on de las distintas fallas fueron detectadas gracias a las comparaciones entre los \textit{resultados esperados} y los \textit{resultados obtenidos} de cada \textit{Test}.

Algunos errores encontrados:

\begin{itemize}
	\item \textbf{Error de acceso a posiciones de resistencia:} Teniendo en cuenta que las posiciones de resistencia de cada \textit{ARVs} en la Base de Datos comienza en la posici\'on 1, se encontraron errores al momento de aplicar los \textit{ARVs}, ya que, las posiciones de los codones en la secuencia mutante comienza en la posici\'on 0.
	
	\item \textbf{Ciclo infinito}: A partir de la prueba 6, se reporto un error de ciclo infinito en la obtenci\'on de mutantes alcanzables, ya que, a partir de algunas aplicaciones de \textit{ARVs} sobre algunas mutantes especificas, se obten\'ian como resultado mutaciones ya calculadas. 
\end{itemize}

\end{itemize}